JDK: 1.8
SpringBoot: 1.5.10.RELEASE
通过 @EnableAutoConfiguration 类上的注解@Import({EnableAutoConfigurationImportSelector.class})
的 EnableAutoConfigurationImportSelector 的源码:
1 | public String[] selectImports(AnnotationMetadata annotationMetadata) { |
其中:
1 | protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { |
该方法中有个重要的方法:
SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
而 getSpringFactoriesLoaderFactoryClass() 实质就是获取 EnableAutoConfiguration 的 class 信息:
1 | protected Class<?> getSpringFactoriesLoaderFactoryClass() { |
而 从 loadFactoryNames 的源码:
1 | public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) { |
中可以发现,其就是加载 META-INF/spring.factories 路径下的资源配置。该文件位于 spring-boot-autoconfigure 的 META-INF/spring.factories 中,定义了 SpringBoot 中所有预定义的自动配置类的类路径